From: Cody Russell Date: Mon, 21 Jul 2008 12:46:41 +0000 (+0000) Subject: Bug 153567 – Repaint glitches in widgets X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1~1^2~428^2^2~31605 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=c8fef535;p=gtk4.git Bug 153567 – Repaint glitches in widgets 2008-07-21 Cody Russell Bug 153567 – Repaint glitches in widgets * gdk/win32/gdkevents-win32.c: Set a sync timer when we receive WM_SYNCPAINT, and RedrawWindow() once the timer expires. svn path=/trunk/; revision=20881 --- diff --git a/ChangeLog b/ChangeLog index 57b20ed613..3ff3e8ebd3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-07-21 Cody Russell + + Bug 153567 – Repaint glitches in widgets + + * gdk/win32/gdkevents-win32.c: Set a sync timer when + we receive WM_SYNCPAINT, and RedrawWindow() once + the timer expires. + 2008-07-21 Michael Natterer * gtk/gtktoolbar.c (gtk_toolbar_class_init): use the simpler diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index 6633f59208..6e35654691 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -139,6 +139,7 @@ static HKL latin_locale = NULL; static gboolean in_ime_composition = FALSE; static UINT modal_timer; +static UINT sync_timer = 0; static int debug_indent = 0; @@ -2031,14 +2032,31 @@ handle_stuff_while_moving_or_resizing (void) static VOID CALLBACK modal_timer_proc (HWND hwnd, - UINT msg, - UINT id, - DWORD time) + UINT msg, + UINT id, + DWORD time) { if (_sizemove_in_progress) handle_stuff_while_moving_or_resizing (); } +static VOID CALLBACK +sync_timer_proc (HWND hwnd, + UINT msg, + UINT id, + DWORD time) +{ + MSG message; + if (PeekMessageW (&message, hwnd, WM_PAINT, WM_PAINT, PM_REMOVE)) + { + return; + } + + RedrawWindow (hwnd, NULL, NULL, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ALLCHILDREN); + + KillTimer (hwnd, sync_timer); +} + static void handle_display_change (void) { @@ -2824,6 +2842,13 @@ gdk_event_translate (MSG *msg, *ret_valp = 1; break; + case WM_SYNCPAINT: + + sync_timer = SetTimer (GDK_WINDOW_HWND (window), + 1, + 200, sync_timer_proc); + break; + case WM_PAINT: handle_wm_paint (msg, window, FALSE, NULL); break;